Precise iOS Toolkit
2.13.0
Main Page
Modules
Classes
Files
File List
File Members
All
Classes
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Macros
Groups
Smartcard
winscard.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2011 - 2013, Precise Biometrics AB
3
* All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
7
* are met:
8
* 1. Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
* 2. Redistributions in binary form must reproduce the above copyright
11
* notice, this list of conditions and the following disclaimer in the
12
* documentation and/or other materials provided with the distribution.
13
* 3. Neither the name of the Precise Biometrics AB nor the names of its
14
* contributors may be used to endorse or promote products derived from
15
* this software without specific prior written permission.
16
*
17
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
20
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
21
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
22
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
23
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
24
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
25
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
27
* THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
28
* DAMAGE.
29
*
30
*
31
* $Date: 2015-02-03 13:22:25 +0100 (Tue, 03 Feb 2015) $ $Rev: 26843 $
32
*
33
*/
34
35
#ifndef _WINSCARD_H_
36
#define _WINSCARD_H_
37
38
#include <errno.h>
39
#include "
wintypes.h
"
40
41
#pragma mark SCARD_SCOPE_
42
46
#define SCARD_SCOPE_USER 0
47
50
#define SCARD_SCOPE_TERMINAL 1
51
54
#define SCARD_SCOPE_SYSTEM 2
55
57
#pragma mark SCARD_SHARE_
58
62
#define SCARD_SHARE_EXCLUSIVE 1
63
64
#define SCARD_SHARE_SHARED 2
65
67
#define SCARD_SHARE_DIRECT 3
68
73
#define SCARD_LEAVE_CARD 0
74
75
#define SCARD_RESET_CARD 1
76
77
#define SCARD_UNPOWER_CARD 2
78
79
#define SCARD_EJECT_CARD 3
80
83
#define SCARD_AUTOALLOCATE (DWORD)(-1)
84
89
#define SCARD_UNKNOWN 0
90
91
#define SCARD_ABSENT 1
92
94
#define SCARD_PRESENT 2
95
97
#define SCARD_SWALLOWED 3
98
100
#define SCARD_POWERED 4
101
103
#define SCARD_NEGOTIABLE 5
104
106
#define SCARD_SPECIFIC 6
107
114
#define SCARD_STATE_UNAWARE 0x00000000
115
117
#define SCARD_STATE_IGNORE 0x00000001
118
122
#define SCARD_STATE_CHANGED 0x00000002
123
126
#define SCARD_STATE_UNKNOWN 0x00000004
127
129
#define SCARD_STATE_UNAVAILABLE 0x00000008
130
132
#define SCARD_STATE_EMPTY 0x00000010
133
134
#define SCARD_STATE_PRESENT 0x00000020
135
138
#define SCARD_STATE_ATRMATCH 0x00000040
139
142
#define SCARD_STATE_EXCLUSIVE 0x00000080
143
146
#define SCARD_STATE_INUSE 0x00000100
147
149
#define SCARD_STATE_MUTE 0x00000200
150
151
#define SCARD_STATE_UNPOWERED 0x00000400
152
157
#define SCARD_S_SUCCESS ((DWORD)0x00000000L)
158
159
#define SCARD_F_INTERNAL_ERROR ((DWORD)0x80100001L)
160
161
#define SCARD_E_CANCELLED ((DWORD)0x80100002L)
162
163
#define SCARD_E_INVALID_HANDLE ((DWORD)0x80100003L)
164
165
#define SCARD_E_INVALID_PARAMETER ((DWORD)0x80100004L)
166
167
#define SCARD_E_INVALID_TARGET ((DWORD)0x80100005L)
168
169
#define SCARD_E_NO_MEMORY ((DWORD)0x80100006L)
170
171
#define SCARD_F_WAITED_TOO_LONG ((DWORD)0x80100007L)
172
174
#define SCARD_E_INSUFFICIENT_BUFFER ((DWORD)0x80100008L)
175
176
#define SCARD_E_UNKNOWN_READER ((DWORD)0x80100009L)
177
178
#define SCARD_E_TIMEOUT ((DWORD)0x8010000AL)
179
181
#define SCARD_E_SHARING_VIOLATION ((DWORD)0x8010000BL)
182
184
#define SCARD_E_NO_SMARTCARD ((DWORD)0x8010000CL)
185
186
#define SCARD_E_UNKNOWN_CARD ((DWORD)0x8010000DL)
187
188
#define SCARD_E_CANT_DISPOSE ((DWORD)0x8010000EL)
189
191
#define SCARD_E_PROTO_MISMATCH ((DWORD)0x8010000FL)
192
193
#define SCARD_E_NOT_READY ((DWORD)0x80100010L)
194
196
#define SCARD_E_INVALID_VALUE ((DWORD)0x80100011L)
197
199
#define SCARD_E_SYSTEM_CANCELLED ((DWORD)0x80100012L)
200
202
#define SCARD_F_COMM_ERROR ((DWORD)0x80100013L)
203
204
#define SCARD_F_UNKNOWN_ERROR ((DWORD)0x80100014L)
205
206
#define SCARD_E_INVALID_ATR ((DWORD)0x80100015L)
207
208
#define SCARD_E_NOT_TRANSACTED ((DWORD)0x80100016L)
209
210
#define SCARD_E_READER_UNAVAILABLE ((DWORD)0x80100017L)
211
212
#define SCARD_P_SHUTDOWN ((DWORD)0x80100018L)
213
214
#define SCARD_E_PCI_TOO_SMALL ((DWORD)0x80100019L)
215
216
#define SCARD_E_READER_UNSUPPORTED ((DWORD)0x8010001AL)
217
218
#define SCARD_E_DUPLICATE_READER ((DWORD)0x8010001BL)
219
220
#define SCARD_E_CARD_UNSUPPORTED ((DWORD)0x8010001CL)
221
222
#define SCARD_E_NO_SERVICE ((DWORD)0x8010001DL)
223
224
#define SCARD_E_SERVICE_STOPPED ((DWORD)0x8010001EL)
225
226
#define SCARD_E_UNEXPECTED ((DWORD)0x8010001FL)
227
228
#define SCARD_E_ICC_INSTALLATION ((DWORD)0x80100020L)
229
230
#define SCARD_E_ICC_CREATEORDER ((DWORD)0x80100021L)
231
232
#define SCARD_E_UNSUPPORTED_FEATURE ((DWORD)0x80100022L)
233
234
#define SCARD_E_DIR_NOT_FOUND ((DWORD)0x80100023L)
235
236
#define SCARD_E_FILE_NOT_FOUND ((DWORD)0x80100024L)
237
238
#define SCARD_E_NO_DIR ((DWORD)0x80100025L)
239
240
#define SCARD_E_NO_FILE ((DWORD)0x80100026L)
241
242
#define SCARD_E_NO_ACCESS ((DWORD)0x80100027L)
243
244
#define SCARD_E_WRITE_TOO_MANY ((DWORD)0x80100028L)
245
246
#define SCARD_E_BAD_SEEK ((DWORD)0x80100029L)
247
248
#define SCARD_E_INVALID_CHV ((DWORD)0x8010002AL)
249
250
#define SCARD_E_UNKNOWN_RES_MNG ((DWORD)0x8010002BL)
251
252
#define SCARD_E_NO_SUCH_CERTIFICATE ((DWORD)0x8010002CL)
253
254
#define SCARD_E_CERTIFICATE_UNAVAILABLE ((DWORD)0x8010002DL)
255
256
#define SCARD_E_NO_READERS_AVAILABLE ((DWORD)0x8010002EL)
257
259
#define SCARD_E_COMM_DATA_LOST ((DWORD)0x8010002FL)
260
261
#define SCARD_E_NO_KEY_CONTAINER ((DWORD)0x80100030L)
262
263
#define SCARD_E_SERVER_TOO_BUSY ((DWORD)0x80100031L)
264
265
#define SCARD_E_PIN_CACHE_EXPIRED ((DWORD)0x80100032L)
266
267
#define SCARD_E_NO_PIN_CACHE ((DWORD)0x80100033L)
268
269
#define SCARD_E_READ_ONLY_CARD ((DWORD)0x80100034L)
270
272
#define SCARD_W_UNSUPPORTED_CARD ((DWORD)0x80100065L)
273
274
#define SCARD_W_UNRESPONSIVE_CARD ((DWORD)0x80100066L)
275
277
#define SCARD_W_UNPOWERED_CARD ((DWORD)0x80100067L)
278
279
#define SCARD_W_RESET_CARD ((DWORD)0x80100068L)
280
282
#define SCARD_W_REMOVED_CARD ((DWORD)0x80100069L)
283
284
#define SCARD_W_SECURITY_VIOLATION ((DWORD)0x8010006AL)
285
286
#define SCARD_W_WRONG_CHV ((DWORD)0x8010006BL)
287
289
#define SCARD_W_CHV_BLOCKED ((DWORD)0x8010006CL)
290
291
#define SCARD_W_EOF ((DWORD)0x8010006DL)
292
293
#define SCARD_W_CANCELLED_BY_USER ((DWORD)0x8010006EL)
294
295
#define SCARD_W_CARD_NOT_AUTHENTICATED ((DWORD)0x8010006FL)
296
297
#define SCARD_W_CACHE_ITEM_NOT_FOUND ((DWORD)0x80100070L)
298
299
#define SCARD_W_CACHE_ITEM_STALE ((DWORD)0x80100071L)
300
302
#define SCARD_W_CACHE_ITEM_TOO_BIG ((DWORD)0x80100072L)
303
308
#define SCARD_PROTOCOL_UNDEFINED 0x00000000
309
310
#define SCARD_PROTOCOL_T0 0x00000001
311
312
#define SCARD_PROTOCOL_T1 0x00000002
313
314
#define SCARD_PROTOCOL_RAW 0x00010000
315
316
#define SCARD_PROTOCOL_Tx (SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1)
317
318
#define SCARD_PROTOCOL_ANY SCARD_PROTOCOL_Tx
319
321
extern
uint8_t
g_bgm_disable
;
325
#define DISABLE_BACKGROUND_MANAGEMENT (&g_bgm_disable)
326
327
#define SCARD_ATTR_VALUE(Class, Tag) ((((DWORD)(Class)) << 16) | ((DWORD)(Tag)))
328
329
#define SCARD_CLASS_VENDOR_INFO 1 // Vendor information definitions
330
#define SCARD_CLASS_COMMUNICATIONS 2 // Communication definitions
331
#define SCARD_CLASS_PROTOCOL 3 // Protocol definitions
332
#define SCARD_CLASS_POWER_MGMT 4 // Power Management definitions
333
#define SCARD_CLASS_SECURITY 5 // Security Assurance definitions
334
#define SCARD_CLASS_MECHANICAL 6 // Mechanical characteristic definitions
335
#define SCARD_CLASS_VENDOR_DEFINED 7 // Vendor specific definitions
336
#define SCARD_CLASS_IFD_PROTOCOL 8 // Interface Device Protocol options
337
#define SCARD_CLASS_ICC_STATE 9 // ICC State specific definitions
338
#define SCARD_CLASS_PERF 0x7FFE // performace counters
339
#define SCARD_CLASS_SYSTEM 0x7FFF // System-specific definitions
340
341
/* Attribute to set/get whether or not the library automatically handles
342
background execution.
343
Valid values are 0 to disable and 1 to enable the feature. The size of the
344
value buffer must be set to sizeof(BYTE). */
345
#define SCARD_ATTR_AUTO_BACKGROUND_HANDLING SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED, 0xB100)
346
347
/* Attribute to set/get whether an inserted card shall be automatically powered when inserted
348
in the reader.
349
Most desktop implementations of PCSC will automatically power on the smart when it is inserted
350
in the smart card reader. This implementation however will not automatically power on the card
351
with regards to battery life of the iOS device.
352
This means that the SCARD_READERSTATE structure used in SCardGetStatusChange will be populated
353
somewhat differently compared with a desktop implementation. For example, the ATR value in
354
rgbAtr/cbAtr will be blank prior to calls to SCardConnect.
355
It is possible to enabled automatic power on in order to mimic desktop PCSC behaviour using
356
the proprietary SCARD_ATTR_AUTO_POWER_ON attribute together with a call to SCardSetAttrib.
357
The default value is set to disabled. The set value is global and is valid until the last
358
SCARDCONTEXT is released with a call to SCardReleaseContext.
359
Valid values are 0 to disable and 1 to enable the feature. The size of the
360
value buffer must be set to sizeof(BYTE). */
361
#define SCARD_ATTR_AUTO_POWER_ON SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED, 0xB101)
362
363
364
typedef
LONG
SCARDCONTEXT
;
365
typedef
SCARDCONTEXT
*
PSCARDCONTEXT
;
366
typedef
SCARDCONTEXT
*
LPSCARDCONTEXT
;
367
typedef
LONG
SCARDHANDLE
;
368
typedef
SCARDHANDLE
*
PSCARDHANDLE
;
369
typedef
SCARDHANDLE
*
LPSCARDHANDLE
;
370
372
#define SCARD_HANDLE_INVALID 0
373
374
#ifdef __APPLE__
375
#pragma pack(1)
376
#endif
377
379
typedef
struct
380
{
382
const
char
*
szReader
;
385
void
*
pvUserData
;
389
DWORD
dwCurrentState
;
394
DWORD
dwEventState
;
396
DWORD
cbAtr
;
398
unsigned
char
rgbAtr[33];
399
}
400
SCARD_READERSTATE
, *
LPSCARD_READERSTATE
;
401
403
typedef
struct
404
{
406
DWORD
dwProtocol
;
408
DWORD
cbPciLength
;
409
}
410
SCARD_IO_REQUEST
, *
PSCARD_IO_REQUEST
, *
LPSCARD_IO_REQUEST
;
411
412
#ifdef __APPLE__
413
#pragma pack()
414
#endif
415
416
typedef
const
SCARD_IO_REQUEST
*
LPCSCARD_IO_REQUEST
;
417
extern
SCARD_IO_REQUEST
g_rgSCardT0Pci
,
g_rgSCardT1Pci
,
g_rgSCardRawPci
;
418
422
#define SCARD_PCI_T0 (&g_rgSCardT0Pci)
423
424
#define SCARD_PCI_T1 (&g_rgSCardT1Pci)
425
426
#define SCARD_PCI_RAW (&g_rgSCardRawPci)
427
444
LONG
SCardEstablishContext
(
DWORD
dwScope,
445
LPCVOID
pvReserved1,
446
LPCVOID
pvReserved2,
447
LPSCARDCONTEXT
phContext);
448
458
LONG
SCardReleaseContext
(
SCARDCONTEXT
hContext);
459
479
LONG
SCardConnect
(
SCARDCONTEXT
hContext,
480
LPCSTR
szReader,
481
DWORD
dwShareMode,
482
DWORD
dwPreferredProtocols,
483
LPSCARDHANDLE
phCard,
484
LPDWORD
pdwActiveProtocol);
485
505
LONG
SCardReconnect
(
SCARDHANDLE
hCard,
506
DWORD
dwShareMode,
507
DWORD
dwPreferredProtocols,
508
DWORD
dwInitialization,
509
LPDWORD
pdwActiveProtocol);
510
522
LONG
SCardDisconnect
(
SCARDHANDLE
hCard,
523
DWORD
dwDisposition);
524
553
LONG
SCardStatus
(
SCARDHANDLE
hCard,
554
LPSTR
mszReaderName,
555
LPDWORD
pcchReaderLen,
556
LPDWORD
pdwState,
557
LPDWORD
pdwProtocol,
558
LPBYTE
pbAtr,
559
LPDWORD
pcbAtrLen);
560
583
LONG
SCardGetStatusChange
(
SCARDCONTEXT
hContext,
584
DWORD
dwTimeout,
585
LPSCARD_READERSTATE rgReaderStates,
586
DWORD
cReaders);
612
LONG
SCardTransmit
(
SCARDHANDLE
hCard,
613
const
SCARD_IO_REQUEST
*pioSendPci,
614
LPCBYTE
pbSendBuffer,
615
DWORD
cbSendLength,
616
SCARD_IO_REQUEST
*pioRecvPci,
617
LPBYTE
pbRecvBuffer,
618
LPDWORD
pcbRecvLength);
619
642
LONG
SCardListReaders
(
SCARDCONTEXT
hContext,
643
LPCSTR
mszGroups,
644
LPSTR
mszReaders,
645
LPDWORD
pcchReaders);
646
656
LONG
SCardFreeMemory
(
SCARDCONTEXT
hContext,
657
LPCVOID
pvMem);
658
668
LONG
SCardCancel
(
SCARDCONTEXT
hContext);
669
677
LONG
SCardIsValidContext
(
SCARDCONTEXT
hContext);
678
700
LONG
SCardSetAttrib
(
701
SCARDHANDLE
hCard,
702
DWORD
dwAttrId,
703
LPCBYTE
pbAttr,
704
DWORD
cbAttrLen);
705
728
LONG
SCardGetAttrib
(
729
SCARDHANDLE
hCard,
730
DWORD
dwAttrId,
731
LPBYTE
pbAttr,
732
LPDWORD
pcbAttrLen);
733
734
735
#pragma mark Currently not implemented
736
741
LONG
SCardListReaderGroups
(
SCARDCONTEXT
hContext,
742
LPSTR
mszGroups,
743
LPDWORD
pcchGroups);
744
749
LONG
SCardControl
(
SCARDHANDLE
hCard,
750
DWORD
dwControlCode,
751
LPCVOID
pbSendBuffer,
752
DWORD
cbSendLength,
753
LPVOID
pbRecvBuffer,
754
DWORD
cbRecvLength,
755
LPDWORD
lpBytesReturned);
760
LONG
SCardBeginTransaction
(
SCARDHANDLE
hCard);
765
LONG
SCardEndTransaction
(
SCARDHANDLE
hCard,
766
DWORD
dwDisposition);
769
#endif
/* _WINSCARD_H_ */
770
Generated on Wed Oct 7 2015 12:52:27 for Precise iOS Toolkit by
1.8.1.1